Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密) |
您所在的位置:网站首页 › java 文件加密 › Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密) |
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 密码配置项都不加密?想啥呢? 最起码不能用明文直接写在配置文件里! 一、如何加密配置项呢? 1. 引入jasypt-spring-boot加密组件 com.github.ulisesbocchio jasypt-spring-boot-starter 3.0.2 2. 配置加密密钥 jasypt: encryptor: password: Encryptjasypt会使用这个自定义加密密钥,对配置文件里的重要项进行加密。 3. 加密我们直接扩展Spring Boot项目的启动类,项目启动时执行加密测试代码 @Component public class SpringBootConfigEncrypt implements CommandLineRunner { @Autowired private ApplicationContext applicationContext; @Autowired private StringEncryptor encryptor; @Override public void run(String... args) throws Exception { Environment environment = applicationContext.getBean(Environment.class); // 首先获取配置文件里的原始明文信息 // 根据自己配置文件中的密码读取路径自行更改 String oldPassword = environment.getProperty("spring.datasource.dynamic.datasource.master.password"); // 加密 String encryptPassword = encrypt( oldPassword ); // 打印加密前后的结果对比 System.out.println( "MySQL原始明文密码为:" + oldPassword ); System.out.println( "====================================" ); System.out.println( "MySQL原始明文密码加密后的结果为:" + encryptPassword ); } private String encrypt( String originPassord ) { return encryptor.encrypt( originPassord ); } private String decrypt( String encryptedPassword ) { return encryptor.decrypt( encryptedPassword ); } }运行项目,控制台打印:
启动正常 自定义的前后缀标记,比如我想换成CodeSheep()来标记加密字段,此时只需要在配置文件里配置一下前后缀即可: jasypt: encryptor: property: prefix: Code( suffix: )同样yml中的也需要更改 自定义加密密钥泄露,那我们的加密字段也还是有可能被别人解密,为此,有几项工作可以让加密变得更加安全。 2.1 使用自定义加密器上文实验加密时,使用的是默认的加密规则,这一点会让当自定义加密密钥泄漏时可能变得不安全。为此我们可以自定义加密规则。 @Configuration public class CodeSheepEncryptorCfg { @Bean public StringEncryptor myEncryptStringEncryptor() { PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword("Encrypt"); config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256"); config.setKeyObtentionIterations("1000"); config.setPoolSize("1"); config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator"); config.setStringOutputType("base64"); encryptor.setConfig(config); return encryptor; } }将加密测试代码的加密器进行修改 @Autowired注入原理: 先按照类型进行注入如果在Spring容器中存在同一个类型的多个bean,那么此时在进行注入的时候是按照属性名称进行注入 2.2 加密密钥不要写在配置文件中如果觉得上面这种方式还是可能会导致加密密钥泄露的话,可以直接将加密密钥从配置文件中拿掉,有三种方式: 2.2.1 方式一:直接作为程序启动时的命令行参数来带入 java -jar app.jar --jasypt.encryptor.password=Encrypt 2.2.2 方式二:直接作为程序启动时的应用环境变量来带入 java -Djasypt.encryptor.password=Encrypt -jar app.jar 2.2.3 方式三:甚至可以作为系统环境变量的方式来带入
我们提前配置好自定义全局环境变量,则直接在Spring Boot的项目配置文件中做如下配置即可: linux中编辑/etc/profile全局配置文件 export JASYPT_ENCRYPTOR_PASSWORD = Encrypt重载配置文件/etc/profile, 因为配置文件修改后要立刻加载里面的数据就需要重新加载 source /etc/profileyml中 jasypt: encryptor: password: ${JASYPT_ENCRYPTOR_PASSWORD}这时候也安全很多 四、加密工具类很多,这里再列举两种加密工具类非常多,大家可以自行选择 这里列举其他两种: 4.1 第一种 public class JasyptUtil { public static void main(String[] arg) { StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); /*配置文件中配置如下的算法*/ standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES"); /*配置文件中配置的password*/ standardPBEStringEncryptor.setPassword("Encrypt"); /*要加密的文本*/ String name = standardPBEStringEncryptor.encrypt("root"); String password = standardPBEStringEncryptor.encrypt("123456"); /*将加密的文本写到配置文件中*/ System.out.println("name=" + name); System.out.println("password=" + password); } } 4.2 第二种 public class JasyptUtil { public static void main(String[] args) { String account = "root"; String password = "123456"; BasicTextEncryptor encryptor = new BasicTextEncryptor(); //秘钥 encryptor.setPassword("Encrypt"); //密码进行加密 String newAccount = encryptor.encrypt(account); String newPassword = encryptor.encrypt(password); System.out.println("加密后账号:" + newAccount); System.out.println("加密后密码:" + newPassword); } } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |